﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data.SqlClient;
using Empresa.Sistema.Datos.Entidades;

namespace Empresa.Sistema.Datos
{
    public class Usuarios
    {

        private string ConnectionString = "Data Source=.;Initial Catalog=SistemaBibliotecaV1;Integrated Security=True";

        
        public int CheckPassword(string cod, string psw)
        {
            try
            {
                int aux = 0;
                using (var cnx = new SqlConnection(ConnectionString))
                {
                    cnx.Open();
                    string cmdText = "usp_CheckPassword";
                    using (var cmd = new SqlCommand(cmdText, cnx))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@Codigo", cod));
                        cmd.Parameters.Add(new SqlParameter("@Clave",  psw));

                        try { aux = (int)cmd.ExecuteScalar(); }
                        catch (Exception ex) { return 0; }

                        return aux;
                        
                    }                   
                }
                
            }
            catch (SqlException ex)
            {
                return -1; 
            }
           
        }

        public void Adicionar(Usuario usu)
        {
            try
            {
                using (var cnx = new SqlConnection(ConnectionString))
                {
                    cnx.Open();
                    string cmdText = "usp_InsertarUsuario";
                    using (var cmd = new SqlCommand(cmdText, cnx))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@Codigo", usu.Codigo));
                        cmd.Parameters.Add(new SqlParameter("@Clave", usu.Clave));
                        cmd.Parameters.Add(new SqlParameter("@Nombre", usu.Nombre));
                        cmd.Parameters.Add(new SqlParameter("@Apellido", usu.Apellido));
                        cmd.Parameters.Add(new SqlParameter("@Cargo", usu.Cargo));
                        cmd.Parameters.Add(new SqlParameter("@FechaNacimiento", usu.FechaNacimiento));
                        cmd.Parameters.Add(new SqlParameter("@Sexo", usu.Sexo));
                        cmd.Parameters.Add(new SqlParameter("@Telefono", usu.Telefono));
                        cmd.Parameters.Add(new SqlParameter("@Direccion", usu.Direccion));
                        cmd.Parameters.Add(new SqlParameter("@Mail", usu.Mail));                        
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (SqlException ex)
            {

            }

        }

        public void Modificar(Usuario usu)
        {
            try
            {
                using (var cnx = new SqlConnection(ConnectionString))
                {
                    cnx.Open();
                    string cmdText = "usp_ModificarUsuario";
                    using (var cmd = new SqlCommand(cmdText, cnx))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@Id", usu.Id));
                        cmd.Parameters.Add(new SqlParameter("@Codigo", usu.Codigo));
                        cmd.Parameters.Add(new SqlParameter("@Clave", usu.Clave));
                        cmd.Parameters.Add(new SqlParameter("@Nombre", usu.Nombre));
                        cmd.Parameters.Add(new SqlParameter("@Apellido", usu.Apellido));
                        cmd.Parameters.Add(new SqlParameter("@Cargo", usu.Cargo));
                        cmd.Parameters.Add(new SqlParameter("@FechaNacimiento", usu.FechaNacimiento));
                        cmd.Parameters.Add(new SqlParameter("@Sexo", usu.Sexo));
                        cmd.Parameters.Add(new SqlParameter("@Telefono", usu.Telefono));
                        cmd.Parameters.Add(new SqlParameter("@Direccion", usu.Direccion));
                        cmd.Parameters.Add(new SqlParameter("@Mail", usu.Mail));  
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (SqlException ex)
            {

            }

        }

        public void Eliminar(Usuario usu)
        {

            try
            {
                using (var cnx = new SqlConnection(ConnectionString))
                {
                    cnx.Open();
                    string cmdText = "usp_EliminarUsuario";
                    using (var cmd = new SqlCommand(cmdText, cnx))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@Id", usu.Id));
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (SqlException ex)
            {

            }

        }

        public List<Usuario> Listar()
        {
            List<Usuario> lista = new List<Usuario>();

            try
            {
                using (var cnx = new SqlConnection(ConnectionString))
                {
                    cnx.Open();
                    string cmdText = "usp_ListarUsuario";
                    using (var cmd = new SqlCommand(cmdText, cnx))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        SqlDataReader rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            var usu = new Usuario();
                            usu.Id = rdr.GetInt32(rdr.GetOrdinal("Id"));
                            usu.Codigo = rdr.GetString(rdr.GetOrdinal("Codigo"));
                            usu.Clave = rdr.GetString(rdr.GetOrdinal("Clave"));
                            usu.Nombre = rdr.GetString(rdr.GetOrdinal("Nombre"));
                            usu.Apellido = rdr.GetString(rdr.GetOrdinal("Apellido"));
                            usu.Cargo = rdr.GetInt32(rdr.GetOrdinal("Cargo"));
                            usu.FechaNacimiento = rdr.GetDateTime(rdr.GetOrdinal("FechaNacimiento"));
                            usu.Sexo = rdr.GetString(rdr.GetOrdinal("Sexo"));
                            usu.Telefono = rdr.GetString(rdr.GetOrdinal("Telefono"));
                            usu.Direccion = rdr.GetString(rdr.GetOrdinal("Direccion"));
                            usu.Mail = rdr.GetString(rdr.GetOrdinal("Mail"));
                            lista.Add(usu);
                        }
                    }

                }
            }
            catch (SqlException ex)
            {

            }
            return lista;
        }

        public List<Usuario> ConsultaPorApellido(string Apellido)
        {
            List<Usuario> lista = new List<Usuario>();

            try
            {
                using (var cnx = new SqlConnection(ConnectionString))
                {
                    cnx.Open();
                    string cmdText = "usp_ConsultaUsuarioPorApellido";
                    using (var cmd = new SqlCommand(cmdText, cnx))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@Apellido", Apellido));
                        SqlDataReader rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            var usu = new Usuario();
                            usu.Id = rdr.GetInt32(rdr.GetOrdinal("Id"));
                            usu.Codigo = rdr.GetString(rdr.GetOrdinal("Codigo"));
                            usu.Clave = rdr.GetString(rdr.GetOrdinal("Clave"));
                            usu.Nombre = rdr.GetString(rdr.GetOrdinal("Nombre"));
                            usu.Apellido = rdr.GetString(rdr.GetOrdinal("Apellido"));
                            usu.Cargo = rdr.GetInt32(rdr.GetOrdinal("Cargo"));
                            usu.FechaNacimiento = rdr.GetDateTime(rdr.GetOrdinal("FechaNacimiento"));
                            usu.Sexo = rdr.GetString(rdr.GetOrdinal("Sexo"));
                            usu.Telefono = rdr.GetString(rdr.GetOrdinal("Telefono"));
                            usu.Direccion = rdr.GetString(rdr.GetOrdinal("Direccion"));
                            usu.Mail = rdr.GetString(rdr.GetOrdinal("Mail"));
                            lista.Add(usu);
                        }
                    }
                }
            }
            catch (SqlException ex)
            {

            }
            return lista;
        }

    }
}
